/*
 * 	Easy Slider 1.5 - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */
 
/*
 *	markup example for $("#slider").easySlider();
 *	
 * 	<div id="slider">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */
(function($) {
    $.fn.easySlider = function(options) {
	var slideOrientation2 = prefs.getString("slideOrientation");
	var visible = "";
	var height = prefs.getInt("rsH"); 
	var slideHeight = 0;
	var rsw = prefs.getString("rsW") - 60;
	var autoSlideresumes = prefs.getInt("autoSlideresumes") * 1000;
	var defaults = {			
	    prevId: 		'prevBtn',
	    prevText: 		'Previous',
	    nextId: 		'nextBtn',	
	    nextText: 		'Next',
	    controlsShow:	true,
	    controlsBefore:	'',
	    controlsAfter:	'',	
	    controlsFade:	true,
	    firstId: 		'firstBtn',
	    firstText: 		'First',
	    firstShow:		false,
	    lastId: 		'lastBtn',	
	    lastText: 		'Last',
	    lastShow:		false,				
	    vertical:		false,
	    speed: 		800,
	    auto:		false,
	    pause:		2000,
	    continuous:		false
	}; 
	var options = $.extend(defaults, options);  
	var arrowUpSpanStyle;
	var arrowDownSpanStyle;
	var anchorUp;
	var arrowDp;
	
	$("#slider li").css("width", rsw + "px");

	if (options.vertical == true) {
	    var arrowUpLeftPosition = (rsw / 2) - 50;
	    
	    $("#content").css("padding-top", "30px");
	    $("#content").css("padding-bottom", "30px");
	    $("#content").css("height", height+"px");
	    $("#content").css("background-color:", "#ccc;");
	    height -=60;  //Minus the height of the arrow.
	    $("#slider li").css("height", height+"px");

	    arrowUpSpanStyle = "top:0px; left:" + arrowUpLeftPosition+"px; width:100px; height:30px;";
	    anchorUp = "background: transparent url('http://c672807.r7.cf2.rackcdn.com/EasySlider1.5/images/btn_up.png'); background-repeat: no-repeat;  width:100px; height:30px; ";
	    arrowDp = height + 30;
	    arrowDownSpanStyle = "top:"+arrowDp+"px; left:"+arrowUpLeftPosition+"px; width:100px; height:30px;";
	    anchorDown = "background: transparent url('http://c672807.r7.cf2.rackcdn.com/EasySlider1.5/images/btn_down.png'); background-repeat: no-repeat;  width:100px; height:30px; ";
	}
	else {
	    slideHeight = height / 2;
	    slideHeight -= 50; 
	    arrowUpSpanStyle = "top:" + slideHeight + "px";
	    arrowDownSpanStyle = "top:" + rsw + "px";
	    
	    var nextArrowLeft;
	    var nextArrowLeft = "left:" + rsw;   // style left for next arrow
	}		
    
	this.each(function() {  
	    var obj = $(this); 				
	    var s = $("li", obj).length;
	    var w = $("li", obj).width(); 
	    var h = $("li", obj).height(); 
	    var clickable = true;
	    var ts = s - 1;
	    var t = 0;
	    
	    obj.width(w); 
	    obj.height(h); 
	    obj.css("overflow","hidden");
	    $("ul", obj).css('width', s * w);			
	    
	    if (options.continuous){
		$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left", "-"+ w +"px"));
		$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
		$("ul", obj).css('width',(s + 1)*w);
	    };			
	    
	    if (!options.vertical) $("li", obj).css('float', 'left');
	    
	    if (options.controlsShow) {
		var html = options.controlsBefore;
		
		if (options.firstShow) html += '<span id="'+ options.firstId + '" ><a href=\"javascript:void(0);\">' + options.firstText + '</a></span>';
		
		if (options.vertical){
		    html += ' <span id="' + options.prevId + '" style="'+arrowUpSpanStyle + visible +' " ><a href=\"javascript:void(0);\" style="' + anchorUp+'">' + options.prevText + '</a></span>';
		    html += ' <span id="' + options.nextId + '" style="'+arrowDownSpanStyle + ' " ><a href=\"javascript:void(0);\" style="' + anchorDown + '">' + options.nextText + '</a></span>';
		}
		else {
		    html += ' <span id="' + options.prevId + '" style="top:'+ slideHeight + 'px;' + visible + ' " ><a href=\"javascript:void(0);\">' + options.prevText + '</a></span>';
		    html += ' <span id="' + options.nextId + '" style="top:'+ slideHeight + 'px;' + visible + nextArrowLeft + ' " ><a href=\"javascript:void(0);\">' + options.nextText + '</a></span>';
		}
		
		if (options.lastShow) html += ' <span id="' + options.lastId + '"><a href=\"javascript:void(0);\">'+ options.lastText + '</a></span>';
		
		html += options.controlsAfter;						
		$(obj).after(html);										
	    };

	    $("a", "#" + options.nextId).click(function() {		
		animate("next", true);
		
		if (options.auto){
		    timeout = setTimeout(function() {
			animate("next", false);
		    }, autoSlideresumes);
		}	
	    });
	    $("a", "#" + options.prevId).click(function() {		
		animate("prev", true);
		
		if (options.auto){
		    timeout = setTimeout(function() {
			animate("next", false);
		    }, autoSlideresumes);
		}	
	    });	
	    $("a", "#" + options.firstId).click(function() {		
		animate("first", true);
		
		if (options.auto){
		    timeout = setTimeout(function() {
			animate("next", false);
		    }, autoSlideresumes);
		}	
	    });				
	    $("a", "#" + options.lastId).click(function() {		
		animate("last", true);
		
		if (options.auto){
		    timeout = setTimeout(function() {
			animate("next", false);
		    }, autoSlideresumes);
		}	
	    });
	    
	    /* Public method */
	    $.fn.easySlider.start = function() {
		if (options.auto){
		    timeout = setTimeout(function() {
			animate("next", false);
		    }, options.pause);
		};	
	    };
	    
	    $.fn.easySlider.pause = function() {
		clearTimeout(timeout);
	    }
	    
	    function setCurrent(i){
		i = parseInt(i)+1;
		$("li", "#" + options.numericId).removeClass("current");
		$("li#" + options.numericId + i).addClass("current");
	    };
	    
	    vertical_minus();
	    
	    function vertical_minus() {	
		if (options.vertical){
		    $("ul", obj).css("margin-top",-height);
		    $("ul li:first-child", obj).css("margin-left", 0 + "px");	    
		}
	    }
			    	    
	    function adjust() {
		if(t > ts) t = 0;
		
		if(t < 0) t = ts;
		
		if(!options.vertical) {
		    $("ul", obj).css("margin-left",(t * w * - 1));
		}
		else if(options.vertical)  {
		    vertical_minus();
		    $("ul", obj).css("margin-top",(t * h * - 1));	
		}
		
		clickable = true;
		
		if(options.numeric) setCurrent(t);
	    };
	    
	    function animate(dir, clicked) {
		if (clickable) {
		    var ot = t,
			isDone = false;
		    
		    if (clicked) {
			clearTimeout(timeout);
		    }
		    
		    clickable = false;
						    
		    switch(dir) {
			case "next":
			    t = (ot >= ts) ? (options.continuous ? t + 1 : ts) : t + 1;						
			    break; 
			case "prev":
			    t = (t <= 0) ? (options.continuous ? t - 1 : 0) : t - 1;
			    break; 
			case "first":
			    t = 0;
			    break; 
			case "last":
			    t = ts;
			    break; 
			default:
			    t = dir;
			    break; 
		    };
		    
		    var diff = Math.abs(ot - t);
		    var speed = diff * options.speed;
		    
		    if (!options.vertical) {
			p = (t * w * - 1);
			
			$("ul", obj).animate(
			    { marginLeft: p }, 
			    { queue:false, duration:speed, complete:adjust }
			);				
		    }
		    else {
			p = (t * h * - 1);
			$("ul", obj).animate(
			    { marginTop: p }, 
			    { queue:false, duration:speed, complete:adjust }
			);					
		    };
		    
		    if (!options.continuous && options.controlsFade) {					
			if (t == ts) {
			    $("a", "#" + options.nextId).hide();
			    $("a", "#" + options.lastId).hide();
			}
			else {
			    $("a", "#" + options.nextId).show();
			    $("a", "#" + options.lastId).show();					
			}
			
			if(t == 0) {
			    $("a", "#" + options.prevId).hide();
			    $("a", "#" + options.firstId).hide();
			}
			else {
			    $("a", "#" + options.prevId).show();
			    $("a", "#" + options.firstId).show();
			};					
		    };
		    
		    if (t > ts) {
			isDone = true;
		    }
		    
		    if (options.auto && dir == "next" && !clicked) {
			timeout = setTimeout(function() {
			    animate("next", false);
			}, diff * options.speed + options.pause);
		    }
		    
		    if (isDone) {
			doneEvent();
		    }
		}	
	    }
	    
	    var timeout;	
    
	    if (options.numeric) setCurrent(0);
	
	    if (!options.continuous && options.controlsFade){					
		$("a", "#" + options.prevId).hide();
		$("a", "#" + options.firstId).hide();				
	    }				    
	})
    }
})(jQuery);